package com.traffic.api.config;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.log4j.Logger;

import com.jfinal.config.Constants;
import com.jfinal.config.Handlers;
import com.jfinal.config.Interceptors;
import com.jfinal.config.JFinalConfig;
import com.jfinal.config.Plugins;
import com.jfinal.config.Routes;
import com.traffic.api.jedis.Cache;
import com.traffic.api.jedis.IKeyNamingPolicy;
import com.traffic.api.jedis.Redis;
import com.traffic.api.jedis.serializer.JRESerializer;

import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

/**
 * JFinal启动加载类
 */
public class ApiConfig extends JFinalConfig {

	private static Logger logger = Logger.getLogger(ApiConfig.class);

	// 常量配置
	@Override
	public void configConstant(Constants me) {
		
		File file = new File("/data/wwwroot/conf/api.properties");  //线上环境  
		if (file.exists()) {
			loadPropertyFile(file);
		}else {
			loadPropertyFile("api.properties");
		}
		
		// 设置字符集
		me.setEncoding("UTF-8");
		// 设置开发模式
		me.setDevMode(getPropertyToBoolean("devMode", false));
	}

	// 处理器配置 接管所有web请求，可在此层做功能性的拓展
	@Override
	public void configHandler(Handlers me) {
		// DruidStatViewHandler dvh = new DruidStatViewHandler("/druid");
		// me.add(dvh);

	}

	// 拦截器配置 类似与struts2拦截器，处理action
	@Override
	public void configInterceptor(Interceptors me) {
		// me.add(new TxByMethods("find","update","delete","save")); //声明式事物管理
	}

	// 插件配置 JFinal集成了很多插件：redis,druid,quartz...
	@Override
	public void configPlugin(Plugins me) {

		// 加载redisOrderPlugin
		JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
		
		JedisPool jedisPool = new JedisPool(jedisPoolConfig,getProperty("redis.host"),Integer.valueOf(getProperty("redis.port")), 1800,getProperty("redis.password"),15);
		Cache cache = new Cache("redisOrderPlugin", jedisPool, JRESerializer.me,
				IKeyNamingPolicy.defaultKeyNamingPolicy);
		Redis.addCache(cache);

		// 定时任务插件 目前配置了一个每5秒钟执行一次的定时脚
		// QuartzPlugin quartzPlugin = new QuartzPlugin("job.properies");
		// me.add(quartzPlugin);

	}

	// 路由配置：1.如下配置；2.写个类如：BlogRoute继承Routes，配置，me.add(new BlogRoute());也可
	// 路径设置：1.第三个参数；2.可通过注解@ActionKey("/index")方式
	@Override
	public void configRoute(Routes me) {

	}

	// jfinal关闭之前
	public void beforeJFinalStop() {
		logger.info("api插件正常关闭");
	};

	// 插件加载完后 方法可选择性使用
	public void afterJFinalStart() {
		logger.info("ApiConfig于 "+new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date()) +"  加载完毕");
	};

}
